#include <iostream>
#include <unistd.h>
#include <thread>

void thread_run()
{
    while (true)
    {
        std::cout << "我是新线程..." << std::endl;
        sleep(1);
    }
}

int main()
{
    // 任何语言，在linux中如果要实现多线程，必定要是用pthread库
    // 如何看待C++11中的多线程呢？？C++11 的多线程，在Linux环境中，本质是对pthread库的封装！
    std::thread t1(thread_run);

    while (true)
    {
        std::cout << "我是主线程..." << std::endl;
        sleep(1);
    }

    t1.join();

    return 0;
}


// #include <iostream>
// #include <pthread.h>
// #include <string>
// #include <unistd.h>
// #include <vector>
// #include <assert.h>

// using namespace std;

// class ThreadData
// {
// public:
//     int number;
//     pthread_t tid;
//     char namebuffer[64];
// };

// void *start_routine(void *args)
// {
//     ThreadData *td = static_cast<ThreadData *>(args); // 安全的强制类型转换
//     int cnt = 10;
//     while (cnt)
//     {
//         cout << "new thread success, name: " << td->namebuffer << " cnt: " << cnt << endl;
//         sleep(1);
//         // int *p = nullptr;
//         //  p=NULL;
//         //*p=0;
//     }
//     //delete td;
//     return (void*)td->number;
// }

// int main()
// {
//     vector<ThreadData*> threads;
// #define NUM 10
//     for (int i = 0; i < NUM; i++)
//     {
//         ThreadData *td = new ThreadData();
//         td->number=i+1;
//         snprintf(td->namebuffer, sizeof(td->namebuffer), "%s:%d", "thread", i+1);
//         pthread_create(&td->tid, nullptr, start_routine, (void *)td);
//         threads.push_back(td);
//         // pthread_t tid;
//         // char namebuffer[64];
//         // snprintf(namebuffer,sizeof(namebuffer),"%s:%d","thread",i);
//         // pthread_create(&tid,nullptr,start_routine,(void *)"namebuffer");
//         // sleep(1);
//     }


//     for(auto &iter : threads)
//     {
//         cout << "create thread: " << iter->namebuffer << " : " << iter->tid << " suceesss" << endl;
//     }

//     for(auto &iter : threads)
//     {
//         void* ret=nullptr;
//         int n = pthread_join(iter->tid, &ret);
//         assert(n == 0);
//         cout << "join : " << iter->namebuffer << " success, number: " <<(int_least32_t)ret<< endl;
//         delete iter;
//     }

//     // while (true)
//     // {
//     //     cout << "new thread success, name: main thread" << endl;
//     //     sleep(1);
//     // }

//     // pthread_t id;
//     // pthread_create(&id, nullptr, start_routine, (void *)"thread new");

//     // while (true)
//     // {
//     //     cout << "new thread success, name: main thread"<< endl;
//     //     sleep(1);
//     // }

//     return 0;
// }